#pragma once

#include "../ecs/query.hpp"

#include "qlib/all.h"

#include <functional>
#include <map>

#include <typeindex>

namespace qbe::ol {

class Models {
 public:
  Models(ecs::Query* _query);

  template <typename PtrType>
  void addLayoutElement();

  template <typename PtrType>
  void changeLayoutElement();

  template <typename PtrType>
  void deleteLayoutElement();

  // 可使用

  // 清除所有选择（整体和部分）对象
  void clearAllSelect();

  // 获取吸附点（刻度尺强行要求吸附使用，未吸附返回鼠标坐标系位置）
  qlib::Vec2d getAbsorb();

  // 判断图层是否隐藏（用于绘制时判断）
  bool currentLayerIsHide(uint32_t layer);

 private:
  // std::unordered_map<std::type_index, std::function<bool()>>

  ecs::Query* query;
};

}  // namespace qbe::ol